from flask import Flask
from settings import dict_config
from flask_migrate import Migrate
"""
创建app的函数，参数是代表运行的类型：1：开发环境 2：生产环境
"""
def create_app(run_type):
    app = Flask(__name__)
    # 加载整个项目的配置
    app.config.from_object(dict_config.get(run_type))
    # 初始化数据库
    from comment.modules import db
    db.init_app(app)
    # 初始化redis
    from comment.utils.Financial_Redis import fr
    fr.init_app(app)

    # 添加请求钩子
    from comment.utils.request_auth import jwt_request_auth
    app.before_request(jwt_request_auth)  # 所有服务器的请求都有当前的请求钩子

    # 初始化日志处理的工具
    from comment.utils.Financial_Logging import create_logger
    create_logger(app)

    # 初始化Migrate, 可以执行命令， “flask db init”  "flask db migrate "  "flask db upgrade"
    # 上面三个命令，需要默认flask项目入口文件，当前的项目没有默认的入口文件，需要设置环境变量
    # 需要正在入口文件将需要创建的类给导入即可， 如 from comment.modules.user import User
    Migrate(app, db)

    # 加载蓝图初始化
    from financial.resources.user import user_bp
    from financial.resources.letter import letter_bp
    from financial.resources.account import account_bp
    from financial.resources.card import card_bp
    from financial.resources.product import product_bp
    from financial.resources.transaction import transaction_bp
    app.register_blueprint(user_bp)
    app.register_blueprint(letter_bp)
    app.register_blueprint(account_bp)
    app.register_blueprint(card_bp)
    app.register_blueprint(product_bp)
    app.register_blueprint(transaction_bp)

    return app